home *** CD-ROM | disk | FTP | other *** search
/ MacWorld: Complete Mac Interactive / Macworld Complete Mac Interactive CD)(1994).iso / The Best of BMUG / Utilities / Text and Speech / Alpha.5.76 / Tcl / SystemCode / grep.tcl < prev    next >
Text File  |  1994-03-11  |  1KB  |  57 lines

  1. #================================================================================
  2. # 'greplist' and 'grepfset' are used for batch searching from the "find" dialog.
  3. #  Hence, you really shouldn't mess with them unless you know what you are doing.
  4. #================================================================================
  5. proc greplist {args} {
  6.     set num [expr [llength $args] - 2]
  7.     set exp [lindex $args $num]
  8.     set arglist [lindex $args [expr $num + 1]]
  9.     
  10.     set owin 0
  11.     set cid [scancontext create]
  12.  
  13.     set cmd [lrange $args 0 [expr $num - 1]]
  14.     eval scanmatch $cmd {$cid $exp {
  15.             if (!$owin) {
  16.                 set owin 1
  17.                 new
  18.                 set w [lindex [winNames -f] 0]
  19.             }
  20.             insertText -w $w "File \"[file tail $f]\"; Line $matchInfo(linenum): $matchInfo(line)\r"}
  21.     }
  22.  
  23.     foreach f $arglist {
  24.         set fid [open $f]
  25.         scanfile $cid $fid
  26.         close $fid
  27.     }
  28.     scancontext delete $cid
  29. }
  30.  
  31. proc grepfset {args} {
  32.     global fileSets
  33.  
  34.     set num [expr [llength $args] - 2]
  35.     set exp [lindex $args $num]
  36.     set fset [lindex $args [expr $num + 1]]
  37.     eval greplist [lrange $args 0 [expr $num-1]] {$exp $fileSets($fset)}
  38. }
  39.  
  40. proc grep {exp args} {
  41.     set files {}
  42.     foreach arg $args {
  43.         append files " " [glob -t TEXT $arg]
  44.     }
  45.     set cid [scancontext create]
  46.     scanmatch $cid $exp {append lines "File \"[file tail $f]\"; Line $matchInfo(linenum): $matchInfo(line)\r"}
  47.     set lines ""
  48.  
  49.     foreach f $files {
  50.         set fid [open $f]
  51.         scanfile $cid $fid
  52.         close $fid
  53.     }
  54.     scancontext delete $cid
  55.     return $lines
  56. }
  57.